<template>
  <div class="scroll list" :style="{ height: height + 'px' }">
    <loading2 v-if="!list.length">loading.......</loading2>
    <div v-if="list.length">
      <div
        class="item"
        v-for="(item, index) in list2"
        :key="index"
        @click="godetail(item)"
      >
        <div class="left">
          <!-- :src  v-lazy -->
          <img v-lazy="item.poster" alt="" />
        </div>
        <div class="middle">
          <div>{{ item.name }}</div>
          <div v-if="type === 1">
            <span>观众评分</span>
            <span class="grade">{{
              item.grade ? item.grade : "暂无数据"
            }}</span>
          </div>

          <div>主演:{{ item.actors | parseActors }}</div>
          <div>{{ item.nation }} | {{ item.runtime }}分钟</div>
        </div>

        <div class="right">
          <span v-if="type === 1">购票</span>
          <span v-else>预售</span>
        </div>
      </div>
    </div>
  </div>
</template>

<script>
import { nowPlayingListData, comingsoonlistdata } from "@/api/api";
import BScroll from "better-scroll";
import loading1 from "@/components/loading1";
import loading2 from "@/components/loading2";
export default {
  props: ["list", "type"],
  components: { loading1, loading2 },
  data() {
    return {
      flag1: true,
      list2: "",
      height: "",
      flag: true,
      pagenum: 1,
      bs: "",
       
    };
  },

  methods: {
    godetail(item) {
      console.log("来到了godetal里面了");
      console.log("item", item);
      this.$router.push("/filmdetail/" + item.filmId);
    },
    // 会动态传参  Pagenum的页数
    // 还会做一个节流的处理
    getData: async function () {
      console.log("来了getdata");
      console.log("flag", this.flag);
      // 节流代码的使用
      if (this.flag) {
        this.flag=false
        this.pagenum++;
        console.log("this.pageNum", this.pagenum);
        // 获取数据
        if (this.type == 1) {
          // 正在热映
          console.log("this.pagenum", this.pagenum);
          var ret = await nowPlayingListData(this.pagenum);
          console.log("ret", ret);
        } else {
          // 即将上映
          var ret = await comingsoonlistdata(this.pagenum);
        }
        // 如果当前请求到的数据数量少于10，则说明后面已经没有数据可以被请求，此时需要将标志设置成false
        if (ret.data.data.films.length < 1) {
          this.flag = false;
        }
        // 将数据处理好新增到列表中去
        this.list2 = this.list2.concat(ret.data.data.films);
         this.flag=true 
      }
    },
  },

  computed: {
    //   这是第四种切换loading的方式
    isflagcompu() {
      console.log("进入computed isflagcompu");
      return this.list[0];
    },
  },

  watch: {
    list(newval) {
      console.log("来到了film list watch里面了");
      console.log("list", this.list);
      // 第二种切换  loading的做法 无bug
      this.flag1 = false;
      this.list2 = this.list;
    },
  },

  filters: {
    parseActors: function (value) {
      let actors = "";
      //   console.log("进入 parseActors 过滤器了  ", value);
      if (value) {
        value.forEach((element) => {
          actors += element.name + "  ";
        });
      } else {
        actors = "暂无";
      }

      return actors;
    },
  },

  beforeCreate() {
    console.log(" film list beforeCreate");
  },

  created() {
    //   第一种课件做法
    console.log(" film list  created");
    //   这是第一种  切换loading的方式
    // if (this.list.length > 0) {
    //   this.flag1 = false;
    // }
  },

  beforeMount() {
    console.log(" film list beforeMount");
  },

  mounted() {
    this.height = document.documentElement.clientHeight - 100;
    this.bs = new BScroll(".scroll", {
      pullUpLoad: true,
      //  激活下滑的事件监听
      pullDownRefresh: true,
      // 禁止点击事件
      click: true,
      // 鼠标滚轮也可以调试
      mouseWheel: true,
      // 不禁用鼠标滚轮事件
      disableMouse: false,
      // 滑动刷新的距离
      pullUpLoad: {
        threshold: -50,
      },
    });

    this.bs.on("pullingUp", () => {
      //  触底之后 会触发我们的写的函数
      this.getData();
      this.bs.finishPullUp();
    });

    this.bs.on("pullingDown", () => {
      //  触底之后 会触发我们的写的函数
      console.log("手往下滑动");
      this.bs.finishPullDown();
    });
  },

  beforeUpdate() {},

  updated() {
    // 错误的配置方式
    // new操作符 是重获新生的过程  new操作符在数据更新的时候 会再次调用  会重新初始化.scroll容器
    //  this.bs = new BScroll('.scroll',{
    //    pullUpLoad:true,
    //   //  激活下滑的事件监听
    //   pullDownRefresh:true,
    //   // 禁止点击事件
    //   click:true
    //  })
    //   this.bs.on('pullingUp',()=>{
    //     //  触底之后 会触发我们的写的函数
    //     this.getData()
    //     this.bs.finishPullUp()
    //   })
    //     this.bs.on('pullingDown',()=>{
    //     //  触底之后 会触发我们的写的函数
    //       console.log('手往下滑动')
    //     this.bs.finishPullDown()
    //   })

    // 正确的配置方式
    if (!this.bs) {
      this.bs = new BScroll(".scroll", {
        pullUpLoad: true,
        //  激活下滑的事件监听
        pullDownRefresh: true,
        // 禁止点击事件
        click: true,
        // 鼠标滚轮也可以调试
        mouseWheel: true,
        // 不禁用鼠标滚轮事件
        disableMouse: false,
        // 滑动刷新的距离
        pullUpLoad: {
          threshold: -50,
        },
      });
    } else {
      // 如果初始化过  继续运行你第一次的初始化  这样就避免了 不断的new 初始化 
      this.bs.refresh();
    }

    this.bs.on("pullingUp", () => {
      //  触底之后 会触发我们的写的函数
      this.getData();
      this.bs.finishPullUp();
    });

    this.bs.on("pullingDown", () => {
      //  触底之后 会触发我们的写的函数
      console.log("手往下滑动");
      this.bs.finishPullDown();
    });
  },

  beforeDestroy() {},

  destroyed() {},
};
</script>


<style  lang='scss'>
.item {
  margin-top: 15px;
  padding-bottom: 35px;
  display: flex;
  color: #797d82;
  font-size: 13px;
  border-bottom: 1px solid #ededed;

  .left {
    width: 77px;
    height: 100px;
    margin-left: 20px;
    img {
      width: 66px;
      height: 100%;
    }
  }

  .middle {
    display: flex;
    flex-direction: column;
    justify-content: space-between;
    width: 55%;

    div:nth-of-type(1) {
      color: #191a1b;
      font-size: 16px;
    }

    div:nth-of-type(3) {
      overflow: hidden;
      text-overflow: ellipsis;
      white-space: nowrap;
    }
  }

  .right {
    width: 15%;
    display: flex;
    align-items: center;
    margin-right: 20px;

    span {
      border: 1px solid #ff5f16;
      background: white;
      color: #ff5f16;
      border-radius: 2px;
      height: 25px;
      line-height: 25px;
      font-size: 13px;
      width: 50px;
      text-align: center;
    }
  }
}

.pingfen {
  color: red;
}
.comfilmlistdivall {
  margin-bottom: 80px;
}

.scroll {
  overflow: hidden;
}
</style>
